package Threads.Sincronizar;

/**
 * @author Luis C. Marques
 */

import java.text.*;
import java.util.*;

/** Experimentar executar este código com e sem o método Conta.movimento sincronizado. */
public class Movimentos {

    static final int NUM_TIMES = 1000;
    
    public Movimentos() {
        long tempoInicial = System.currentTimeMillis();    
        
        Conta conta = new Conta();
        
        Movimento[] depositos = new Movimento[NUM_TIMES];
        Movimento[] levantamentos = new Movimento[NUM_TIMES];
      
        for(int i=0;i< NUM_TIMES; i++){    
            depositos[i] = new Movimento(conta, 1000, "Deposito "+i);
            levantamentos[i] = new Movimento(conta, -1000, "\t\rt\tLevantamento "+i);                    
        }  	
        for(int i=0;i< NUM_TIMES; i++){ //Espera que todos os threads terminem
            try {
                depositos[i].join();
                levantamentos[i].join();    
            } catch (InterruptedException ex) {System.out.println(ex);}
        }
	
      //  if (conta.getSaldo() != 0 )
            System.out.println("O saldo final é " + conta.getSaldo());
         long time = System.currentTimeMillis()-tempoInicial;
         System.out.println("Demorei " + new SimpleDateFormat("mm:ss:SS").format(new Date(time)));
    }
    
    public static void main(String[] args) {
        new Movimentos();
    }
    
}


 